package body Udvar_Pkg is
   package body Functions is
	   procedure Felvetel(U: in out Baromfi_Udvar; A: in Allat) is
		  L : Boolean := False;
		  i : Index_Type;
	   begin
		  if U.Aktualis<=Befogado_Kepesseg then 
			 U.Allatok(U.Aktualis):=A;
		   
			 i:=U.Aktualis;
			 while (I in U.Aktualis..Index_Type'First and not L)  loop
				if u.allatok(i).fajta=u.allatok(u.aktualis).fajta then
				   L:=U.Allatok(u.aktualis)<U.Allatok(i);
				end if;
			 end loop;
			 U.Aktualis:=Index_Type'Succ(U.Aktualis);   

		  end if;
	   end Felvetel;
		  
	   function Darabszam(U: Baromfi_Udvar; A: Haziallatok) return Natural is
		  d : Natural:=0;
	   begin
		  for I in index_Type'First..Index_Type'Pred(u.aktualis) loop
			 if U.Allatok(I).Fajta=A then
				D:=D+1;
			 end if;
		  end loop;
		  return d;
	   end Darabszam;
				
	   function Allatfajtak(U: Baromfi_Udvar; A: Haziallatok) return Tomb is
		  result: Tomb(index_Type'First..U.Aktualis);
		  index: Index_Type:=Index_Type'First;
	   begin
		  for I in index_Type'First..Index_Type'Pred(u.aktualis) loop
			 if U.Allatok(I).Fajta=A then 
				Result(Index):=U.Allatok(I);
				Index:=Index_Type'Succ(Index);
			 end if;
		  end loop;    
		  return result(index_Type'First..INdex_Type'Pred(index));
	   end Allatfajtak;
	   
	   procedure Eladas(U: in out Baromfi_Udvar; A: in Haziallatok) is
		  udvar: Baromfi_Udvar;
	   begin
		  for I in index_Type'First..Index_Type'Pred(u.aktualis) loop
			 if U.Allatok(I).Fajta/=A then
				Felvetel(Udvar, U.Allatok(I));
			 end if;
		  end loop;
		  u:=udvar;
	   end Eladas;

	   procedure Levagas(U: in out Baromfi_Udvar; A: in Allat) is
		  I: Index_Type:=Index_Type'First;
		  l : Boolean:=false;
	   begin
		  while (i in index_Type'First..Index_Type'Pred(u.aktualis) and not L) loop
			 L:=A=U.Allatok(I);
			 if L=True then
				U.Allatok(I):=U.Allatok(Index_Type'Pred(U.Aktualis));
				U.Aktualis:=Index_Type'Pred(U.Aktualis);
			 end if;
			 I:=Index_Type'Succ(I);
		  end loop;
	   end Levagas;

	   function Nyereseg(U: Baromfi_Udvar) return Float is
		  profit: Float:=0.0;
	   begin
		  for I in index_Type'First..Index_Type'Pred(u.aktualis) loop
			 declare 
				Napi_Haszon: Float:=0.0;
			 begin
				napi_haszon:=u.allatok(i).napi_ar;
				case U.Allatok(I).Fajta is
				   when Tyuk => Napi_Haszon:=Napi_Haszon * Float(U.Allatok(I).Napi_Tojasok_Szama);       
				   when Nyul => Napi_Haszon:=Napi_Haszon * Float(U.Allatok(I).Szaporulat_Szama);
				   when Kecske|Marha => Napi_Haszon:=Napi_Haszon * Float(U.Allatok(I).Tej);
				   when Diszno => Napi_Haszon:=Napi_Haszon* Float(U.Allatok(I).Napi_Hizas);
				   when Lo => Napi_Haszon:=Napi_Haszon*Float(U.Allatok(I).Teherbiras);
				end case;
				profit:=profit+napi_haszon*u.allatok(i).napi_szorzo**7;
			 end;
		  end loop;
		  return profit;
	   end Nyereseg;
		   
	   function Ertek_Novekedes(u: Baromfi_Udvar; A: in Haziallatok) return Float is
		  profit: Float:=0.0;
	   begin
		  for I in index_Type'First..Index_Type'Pred(u.aktualis) loop
			 if U.Allatok(I).fajta=A then
				declare 
				   Napi_Haszon: Float:=0.0;
				begin
				   napi_haszon:=u.allatok(i).napi_ar;
				   case U.Allatok(I).Fajta is
					  when Tyuk => Napi_Haszon:=Napi_Haszon * Float(U.Allatok(I).Napi_Tojasok_Szama);       
					  when Nyul => Napi_Haszon:=Napi_Haszon * Float(U.Allatok(I).Szaporulat_Szama);
					  when Kecske|Marha => Napi_Haszon:=Napi_Haszon * Float(U.Allatok(I).Tej);
					  when Diszno => Napi_Haszon:=Napi_Haszon* Float(U.Allatok(I).Napi_Hizas);
					  when Lo => Napi_Haszon:=Napi_Haszon*Float(U.Allatok(I).Teherbiras);
				   end case;
				   profit:=profit+napi_haszon*u.allatok(i).napi_szorzo;
				end;
			 end if;
		  end loop;
		  return profit;
	   end Ertek_Novekedes;
   end Functions;
end Udvar_Pkg;